package com.atguigu.demo.data;

import java.util.prefs.NodeChangeEvent;

/**
 * 单向链表
 *
 */
public class LinkedList {

    /**
     * 头节点
     */
    private StudentNode head = new StudentNode(0, "");

    /**
     * 在尾部添加节点
     *
     * @param node 需要添加的节点
     */
    public void addNode(StudentNode node) {
        StudentNode temp = head;
        while (true) {
            // temp 是尾节点就停止循环
            if (temp.getNext() == null) {
                break;
            }
            // 不是尾节点就向后移动
            temp = temp.getNext();
        }
        // 这个时候已经是尾节点了
        temp.setNext(node);
    }

    /**
     * 遍历链表
     *
     */
    public void traverseNode() {
        System.out.println("开始遍历链表");
        if (head.getNext() == null) {
            System.out.println("链表为空");
        } else {
            StudentNode temp = head.getNext();
            while (true) {
                if (temp.getNext() == null) {
                    break;
                }
                System.out.println(temp);
                temp = temp.getNext();
            }
        }
    }

    /**
     * 按id顺序插入节点
     *
     * @param node
     */
    public void addByOrder(StudentNode node) {
        if (head.getNext() == null) {
            head.setNext(node);
            return;
        } else {
            // 辅助节点
            StudentNode temp = head.getNext();
            // 节点的下一个节点不为空，并且id小于插入的id，就继续下移
            while (temp.getNext() != null && temp.getNext().getId() < node.getId()) {
                 temp = temp.getNext();
            }
            // 如果 temp 的下一个节点存在，则执行该操作
            // 且插入操作，顺序不能换
            if (temp.getNext() != null) {
                node.setNext(temp.getNext());
            }
            temp.setNext(node);
        }
    }

}
